// 系统全局变量

package common

import (
	"api/common/logger"
	"encoding/json"
	"github.com/go-redis/redis"
	"io/ioutil"
	"os"
	"path/filepath"
	"strings"
	"time"
)

// 系统全局变量
var (
	CurDir = strings.Replace(filepath.Dir(os.Args[0]), "\\", "/", -1) // 当前目录

	Config = new(ConfigDef) // 系统配置文件

	RedisClient *redis.Client // 缓存数据客户端
)

func InitConfig() {
	data, err := ioutil.ReadFile(CurDir + "/config/config.json")
	if err != nil {
		logger.Error("读取配置文件错误", err)
		return
	}

	err = json.Unmarshal(data, Config)
	if err != nil {
		logger.Fatal("配置文件读取错误:", err)
	}
}

type ConfigDef struct {
	Title       string `json:"title"`
	ApiName     string `json:"apiName"`
	RunMode     string `json:"runMode"`
	Port        uint32 `json:"port"`
	AllowOrigin string `json:"allowOrigin"`
	ViewsPath   string `json:"viewsPath"`
	Server      string `json:"server"`

	AdminTokenValidMinute time.Duration `json:"adminTokenValidMinute"`

	UploadPath string `json:"uploadPath"`
	Mysql      Mysql  `json:"mysql"`
	Redis      Redis  `json:"redis"`
	Cert       Cert   `json:"cert"`
	WX         WX     `json:"wx"`
}

type Mysql struct {
	Deadline     int    `json:"deadline"`
	Url          string `json:"url"`
	MaxOpenConns int    `json:"maxOpenConns"`
	MaxIdleConns int    `json:"maxIdleConns"`
}

type Redis struct {
	Addr     string `json:"addr"`
	Passwd   string `json:"passwd"`
	PoolSize int    `json:"poolSize"`
}

// SSL证书
type Cert struct {
	Crt string `json:"crt"`
	Key string `json:"key"`
}

// 微信
type WX struct {
	AppID          string `json:"appID"`
	AppSecret      string `json:"appSecret"`
	MchID          string `json:"mchID"`
	ApiKey         string `json:"apiKey"`
	CertPath       string `json:"certPath"`
	SignType       string `json:"signType"`
	SpbillCreateIP string `json:"spbillCreateIP"`
	NotifyUrl      string `json:"notifyUrl"`

	MessageTemplate MessageTemplate `json:"messageTemplate"`
}

// 微信订阅消息模板
type MessageTemplate struct {
	Signup string `json:"signup"`
	Notice string `json:"notice"`
	Pay    string `json:"pay"`
}
